﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BUGCOME.Model.File.Dto
{
    /// <summary>
    /// 文件查询DTO
    /// </summary>
    public class FileQueryDto : PagerInfo
    {
        /// <summary>
        /// 存储类型
        /// </summary>
        public int? StorageType { get; set; }

        /// <summary>
        /// 可见性
        /// </summary>
        public int? Visibility { get; set; }

        /// <summary>
        /// 文件ID
        /// </summary>
        public long? FileId { get; set; }

        /// <summary>
        /// 文件原名
        /// </summary>
        public string? RealName { get; set; }

        /// <summary>
        /// 存储文件名
        /// </summary>
        public string? Name { get; set; }

        /// <summary>
        /// 创建时间开始
        /// </summary>
        public DateTime? CreateTimeStart { get; set; }

        /// <summary>
        /// 创建时间结束
        /// </summary>
        public DateTime? CreateTimeEnd { get; set; }
    }

    /// <summary>
    /// 文件完整数据传输对象（DTO）
    /// 继承自文件基础DTO，扩展了文件的业务标识、状态及存储相关属性，用于系统中文件全量信息的传输（如文件管理、查询返回等场景）
    /// </summary>
    public class FileDto : FileDtoBase
    {
        /// <summary>
        /// 文件唯一标识（对应数据库表fileBase的id字段）
        /// 雪花算法生成，为空表示未持久化到数据库的新文件，非空表示已存储的文件ID
        /// </summary>
        public long? Id { get; set; }

        /// <summary>
        /// 文件名生成类型（枚举映射）
        /// 用于标识FileName的生成规则：1-保留原始名（RealName）、2-系统随机生成、3-用户自定义
        /// 辅助区分文件名的来源，便于业务逻辑处理
        /// </summary>
        public int? FileNameType { get; set; }

        /// <summary>
        /// 系统展示/存储用文件名（对应数据库表fileBase的name字段）
        /// 可能经过重命名处理（如避免重复），与RealName（原始名）区分，用于前端展示和存储检索
        /// </summary>
        public string FileName { get; set; }

        /// <summary>
        /// 存储文件名
        /// </summary>
        public string? Name { get; set; }

        /// <summary>
        /// 文件状态（枚举映射，对应数据库表fileBase的status字段）
        /// 0-待删除（定时清理）、1-正常（可访问）、2-禁用（不可访问）
        /// 控制文件的生命周期和可用性
        /// </summary>
        public int? Status { get; set; }

        /// <summary>
        /// 存储类型（枚举映射，对应数据库表fileBase的storageType字段）
        /// 1-本地存储、2-阿里云OSS、3-腾讯云COS等
        /// 标识文件实际存储的介质，用于文件读写时选择对应的存储策略
        /// </summary>
        public int StorageType { get; set; } = 1;

        /// <summary>
        /// 存储路径标识（枚举或配置关联，对应数据库表fileBase的storagePath字段映射）
        /// 用于区分存储介质中的路径分组（如1-默认路径、2-备份路径）
        /// 实际路径需结合系统配置表解析（如"/uploads"、"/backups"）
        /// </summary>
        public int? StoragePath { get; set; }
    }
}
